package com.zwh.algorithm.foundation;

/**
 * 选择排序
 *
 * @author yexi
 */
public class SelectSort {

    /**
     * 将一个数组中的两个元素交换位置
     *
     * @param arr 要交换元素的数组
     * @param i   索引1，在本案例中为当前遍历次数，也是目前正被指向的数的索引
     * @param j   索引2，在本案例中为查询出来的数组最小值的索引。
     */
    public static void swap(int[] arr, int i, int j) {
        int tmp = arr[j];
        arr[j] = arr[i];
        arr[i] = tmp;
    }

    public static void selectSort(int[] arr) {
        // 提供一个空数组或者数组长度不足2则代表无需排序
        if (arr == null || arr.length < 2) {
            return;
        }
        int arrLength = arr.length;
        for (int i = 0; i < arrLength; i++) {
            int minValueIndex = i;
            for (int j = i + 1; j < arrLength; j++) {
                minValueIndex = arr[j] < arr[minValueIndex] ? j : minValueIndex;
            }
            swap(arr, i, minValueIndex);
        }
    }

    public static void main(String[] args) {
        int[] array = new int[]{4, 1, 7, 2, 9, 3, 5, 8, 6};
        selectSort(array);
    }

}
